package cn.tude.xml;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

public class Dom4JDemo {
    public static void main(String[] args) throws DocumentException {
        /**
         * 利用Demo4J读取xml文件
         * SAXReader提供了读取XML的API方法
         * read(文件)结果是一个Document对象
         * 简称doc对象，doc对象内部封装了全部
         * 解析以后的XML数据
         */
        File file=new File("./XMLDemo/src/demo.xml");
        SAXReader reader=new SAXReader();
        Document doc=reader.read(file);
        //doc.asXML()输出读取的结果
//        System.out.println(doc.asXML());
        /**
         * 读取根元素的方法
         * doc.getRootElement()
         * 返回唯一的根元素
         * root根
         * Element 元素
         */
        Element root=doc.getRootElement();
//        System.out.println(root.asXML());
        System.out.println("----------------------------");
        String book = root.element("book").element("author").getTextTrim();
        System.out.println(book);
        System.out.println("----------------------------");
//        /**
//         * 获取指定名字的第一个子元素
//         * books->demo
//         *root.element("demo");
//         */
//        Element demo=root.element("demo");
//        System.out.println(demo.asXML());
//        /**
//         * 获取元素中的文本信息：将元素包裹的全部文字读取
//         * 到一个字符串中，元素中包含文字，就返回字符串
//         * 如果元素没有文字，就返回空字符串
//         */
//        String text=demo.getText();
//        System.out.println(text);
//        /**
//         * 获取元素文本信息，同时去除前后的空白,更具实用价值
//         */
//        text=demo.getTextTrim();
//        System.out.println(text);

      /*  Element book=root.element("book");
        Element name=book.element("name");
        System.out.println(name.asXML());
        String text=name.getTextTrim();
        System.out.println(text);*/
        /**
         * 获取一个元素的一组元素
         * e.elements()获取全部子元素，如果没有子元素返回空集合
         * e.elements()(元素名称)获取全部自定义名称的子元素
         */
        List<Element>list=root.elements();
        List<Element>list1=root.elements("book");
        list.forEach(e->System.out.println(e.asXML()));
        list1.forEach(e->System.out.println(e.asXML()));


        //案例输出全部书名
        List<Element>list2=root.elements("book");
        list2.forEach(e->System.out.println(e.element("name").getTextTrim()));
        list2.forEach(e->System.out.println(e.element("author").getTextTrim()));

        /**
         * Dom4j提供了直接获取子元素中文本的方法
         * e.elementTextTrim(元素名)
         * 等价于
         * e.element(元素名).getTextTrim()
         */
        list2.forEach(e->System.out.println(e.elementTextTrim("name")));
        list2.forEach(e->System.out.println(e.elementTextTrim("author")));
        /**
         * 元素上包含读取元素属性的方法
         * e.attributeValue()
         * attribute     属性
         * Value         值list
         */
        list.forEach(e-> System.out.println(e.attributeValue("id")));
    }
}
